package com.ruoyi.common.utils;

/**
 * @program: RuoYi-Vue-master
 * @description:
 * @author: xgw
 * @create: 2025-01-10 15:09
 **/


import org.apache.commons.compress.utils.IOUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class VideoUtil {

    //时间格式
    private static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    //随机数
    private static final Random r = new Random();

    /**
     * 处理视频并保存视频
     */
    public static String saveVideo(String tos, MultipartFile file) throws IOException {
        //从pathUtil中获取图片基础路径和相对路径
        String basePath = PathUtil.getBasePath();
        String uploadPath = PathUtil.getVideoPath(tos);

        //输入输出流
        FileOutputStream fileOutputStream = null;
        InputStream inputStream = null;

        String fileFinallyPath = null;

        try {
            if (file != null ) {
                //获取文件原本名
                String fileName = file.getOriginalFilename();
                if (StringUtils.isNotBlank(fileName)) {
                    // 获取不重复的随机名
                    String realFileName = getRandomFileName();
                    // 获取文件的扩展名
                    String extension = getFileExtension(fileName);
                    //生成新的文件名

                    fileName = realFileName + extension;
                    //生成最终路径
                    fileFinallyPath = basePath + uploadPath + fileName;
                    //生成相对路径，存储与数据库
                    uploadPath = uploadPath + fileName;
                    //与要建立的文件路径建立输出流，并且创建对应的文件夹
                    File outputFile = new File(fileFinallyPath);
                    makeDirPath(outputFile);
                    fileOutputStream = new FileOutputStream(outputFile);
                    //得到上传文件的输入流
                    inputStream = file.getInputStream();
                    //将从inputStream中读取到的文件数据复制到fileOutputStream对应的目标文件中
                    IOUtils.copy(inputStream, fileOutputStream);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //文件操作结束时关闭文件
            if (fileOutputStream != null) {
                fileOutputStream.flush();
                fileOutputStream.close();
            }
        }
        return fileFinallyPath;
    }

    /**
     * 创建目标路径所涉及到的目录
     */
    private static void makeDirPath(File outputFile) {
        if(outputFile.getParentFile()!=null||!outputFile.getParentFile().isDirectory()){
            //如果文件夹未创建，即逐层创建
            outputFile.getParentFile().mkdirs();
        }
    }

    /**
     * 获取输入文件流的扩展名,如.mp4，.mp3, .avi
     */
    public static String getFileExtension(String fileName) {
        return fileName.substring(fileName.lastIndexOf("."));
    }

    /**
     * 生成随机文件名，当前年月日小时分钟秒钟+五位随机数
     */
    public static String getRandomFileName() {
        // 获取随机的五位数
        int rannum = r.nextInt(89999) + 10000;
        String nowTimeStr = sDateFormat.format(new Date());
        return nowTimeStr + rannum;
    }
}
